import registerComponent from '../mixins/register-component'

export default options => {
    const {
        init,
        data = () => ({}),
        converters = {},
        handlers = {},
        computed,
        methods,
        name,
        render,
        contextReady,
        template,
        mixins = [],
        props = {}
    } = options
    const result = {
        ...options,
        props,
        data() {
            return {
                ...data(),
                converters,
                handlers
            }
        },
        mixins: [registerComponent, ...mixins],
        computed,
        methods: {
            ...methods,
            __initComponent: init,
            __contextReady: contextReady
        }
    }
    if (!template && !render) {
        result.render = () => null
    }
    result.install = Vue => Vue.use(name, result)
    return result
}
